#!/bin/bash

# Nombre: sysprep.inc.sh
# Autor: Luis Guillen
# Fecha: 2008-11-24
# Descipcion:
#   Esta libreria proporciona las funciones necesarias para
#   la manipulación del fichero sysprep.inf
#   Requiere de: base.inc.sh



# Elimino los temporales de manejo del sysprep
rm -f /tmp/sysprep.*

# Inicializamos el contador de opciones 
nOpcionSysprep=0

# Recibe el valor y la clave a sustituir
modificaClaveSysprep()
{
	if [ $# -ne 2 ]; then
		echo "modificaClaveSysprep() ERROR: Debe de pasar el par valor y clave!!"
		exit 1
	fi

	clave=$1
	valor=$2

	sysprep_clave[$nOpcionSysprep]="${clave}"
	sysprep_valor[$nOpcionSysprep]="${valor}"
	
	let nOpcionSysprep=nOpcionSysprep+1
}

nSustitucionSysprep=0
# Recibe el la cadena que debe sustituirse por la que debe sustituirse
sustituyeCadenaSysprep()
{
	if [ $# -ne 2 ]; then
		echo "modificaClaveSysprep() ERROR: Debe de pasar el par valor y clave!!"
		exit 1
	fi

	sustituye_esto=$1
	sustituye_por=$2

	sysprep_sustituye_esto[$nSustitucionSysprep]="${sustituye_esto}"
	sysprep_sustituye_por[$nSustitucionSysprep]="${sustituye_por}"

	
	let nSustitucionSysprep=nSustitucionSysprep+1
}



nSeccionSysprep=0

# Recibe el nombre de la sección sysprep que hay entre corchetes, es decir,
# de la sección [GuiRunOnce] hay que pasar GuiRunOnce
# recibe como segundo parámetro el texto a insertar
insertaTextoSeccionSysprep()
{
	if [ $# -ne 2 ]; then
		echo "insertaSeccionSysprep() ERROR: Debe de pasar la sección y el valor a insertar!!"
		exit 1
	fi

	seccion=$1
	texto=$2

	if [ ! -f /tmp/sysprep.${seccion}.tmp ]
	then
		sysprep_seccion[$nSeccionSysprep]="${seccion}"
		let nSeccionSysprep=nSeccionSysprep+1
	fi

	echo "${texto}" >> /tmp/sysprep.${seccion}.tmp
}

# Necesita que los arrays sysprep_clave, sysprep_valor estén declarados globalmente
# esta guarrada es porque bash no permite el paso de varios arrays por parámetro
# Opcionalmente pueden estar declarados los arrays sysprep_sustituye_esto sysprep_sustituye_por

# Recibe el path al fichero sysprep
configuraSysprepInf()
{
	if [ $# -ne 1 ]; then
		echo "configuraSysprepInf() ERROR: Debe de pasar el fichero sysprep!!"
		exit 1
	fi

	ficheroSysprep=$1

	if [ ! -f $ficheroSysprep ]; then
		escribeLog "ERROR: no se encuentra el fichero sysprep.inf!"
		return 1
	fi


	defined sysprep_clave
	if [ $? -ne 0 ]; then
                escribeLog "ERROR: los arrays sysprep_clave y sysprep_valor no se encuentran definidos!"
                exit 1
	fi


	cadena_sed="s/\\r//"
        for (( i = 0 ; i < ${#sysprep_clave[@]} ; i++ ))
        do
		if [ ! -z "${sysprep_valor[$i]}" ]; then
			cadena_sed="${cadena_sed}
				s/${sysprep_clave[$i]}=.*/${sysprep_clave[$i]}=${sysprep_valor[$i]}/"
		else
			# Si la opción está en blanco la elimino del sysprep.inf
			cadena_sed="${cadena_sed}
				s/${sysprep_clave[$i]}=.*//"
		fi
	done

	defined sysprep_sustituye_esto
	if [ $? -eq 0 ]; then
		for (( i = 0 ; i < ${#sysprep_sustituye_esto[@]} ; i++ ))
		do
			cadena_sed="${cadena_sed}
					s/${sysprep_sustituye_esto[$i]}/${sysprep_sustituye_por[$i]}/"

		done
	fi
	
	cadena_sed="${cadena_sed}
	s/$/\\r/"

	cp $ficheroSysprep /tmp/sysprep.inf.orig

	escribeLogSilencioso "La cadena sed: $cadena_sed"
	sed "${cadena_sed}" /tmp/sysprep.inf.orig > $ficheroSysprep
	if [ $? -ne 0 ]; then
                escribeLog "ERROR: durante la sustitución de opciones en sysprep.inf!"
                return 1
	fi

	defined sysprep_seccion
	if [ $? -eq 0 ]; then
		cp $ficheroSysprep /tmp/sysprep.inf.preseccion.1
		for (( i = 0 ; i < ${#sysprep_seccion[@]} ; i++ ))
		do
			seccion_tmp=${sysprep_seccion[$i]}

			escribeLog "Agregando a la sección tmp: ${seccion_tmp}"
			rm -f /tmp/sysprep.inf.preseccion.2

			cat /tmp/sysprep.inf.preseccion.1 | while read -r line
			do
				# fix: sustituir por algo mas eficiente
				echo "${line}" | grep "\[${seccion_tmp}\]" > /dev/null
				if [ $? -eq 0 ]
				then
					echo -E "${line}" >> /tmp/sysprep.inf.preseccion.2
					cat /tmp/sysprep.${seccion_tmp}.tmp >> /tmp/sysprep.inf.preseccion.2
				else
					echo -E "${line}" >> /tmp/sysprep.inf.preseccion.2
				fi
			done
			cp /tmp/sysprep.inf.preseccion.2 /tmp/sysprep.inf.preseccion.1
		done

		# formatea a DOS

		cadena_sed="s/\\r//
		s/$/\\r/"
		sed "${cadena_sed}" /tmp/sysprep.inf.preseccion.1 > $ficheroSysprep
	fi

	escribeLog "Sysprep modificado correctamente"

	return 0
}